import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
// rxjs是nestjs的响应式编程库，是自带的，rxjs是一个观察者模式，使用管道快速处理数据，可以编写异步队列
import { Observable } from 'rxjs'
import { map } from 'rxjs/operators';

interface Data<T> {
    data: T
}

// 做一个拦截器，实现NestInterceptor接口
@Injectable()   // 装饰器注入这个拦截器，在main.ts中配置一下
export class ResponseInterceptor<T> implements NestInterceptor {
    intercept(context: ExecutionContext, next: CallHandler): Observable<Data<T>> {
        // 这个拦截器是为了让返回数据的格式规范，统一为map
        return next.handle().pipe(map(data => ({ status: 200, data, msg: '请求成功' })))
    }
}